/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package construtora.limiar.dao;

import construtora.limiar.dao.generic.AbstractDAO;
import construtora.limiar.dao.generic.DAOEngine;
import construtora.limiar.dao.generic.IDAO;
import construtora.limiar.models.Funcionario;
import construtora.limiar.models.Imovel;
import construtora.limiar.models.Obra;
import construtora.limiar.models.generic.IModel;
import construtora.limiar.util.Utilidades;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author michel
 */
public class ObraDAO extends AbstractDAO implements IDAO{

    public ObraDAO() {
        this.table = "obra";
    }

    
    
    @Override
    public String[][] getFields(IModel model) {
        Obra obra = (Obra) model;
        String[][] fields = new String[8][2];
        fields[0][0] = "id_imovel";
        fields[0][1] = "'" + obra.getImovel().getId().toString() + "'";
        fields[1][0] = "id_engenheiro";
        fields[1][1] = "'" + obra.getEngenheiro().getId().toString() + "'";
        fields[2][0] = "id_paisagista";
        fields[2][1] = "'" + obra.getPaisagista().getId().toString() + "'";        
        fields[3][0] = "id_arquiteto";
        fields[3][1] = "'" + obra.getArquiteto().getId().toString() + "'";
        fields[4][0] = "data_inicio";
        fields[4][1] = "'" + obra.getDataInicio().toString() + "'";
        fields[5][0] = "data_prevista";
        fields[5][1] = "'" + obra.getDataPrevista().toString() + "'";
        fields[6][0] = "status";
        fields[6][1] = "'" + obra.getStatus() + "'";
        fields[7][0] = "descricao";
        fields[7][1] = "'" + obra.getDescricao() + "'";
        return fields;
    }

    @Override
    public IModel fetchOne(IModel model) {
        String where = this.getDefaultWhere(model);
        List<Obra> list = (List<Obra>) this.fetchAll(where, null, null, null);
        if (list != null && list.size() > 0)
            return list.get(0);
        else
            return null;

    }

    @Override
    public List<? extends IModel> fetchAll(String where, String order, Integer limit, Integer offset) {
        List<Obra> list = new ArrayList<Obra>();
        ResultSet rs = DAOEngine.fetchAll(this.table, where, order, limit, offset);
        ImovelDAO imovDao = new ImovelDAO();
        FuncionarioDAO funcDao = new FuncionarioDAO();
        try {
            while (rs.next()){
                Obra obra = new Obra();
                obra.setId(rs.getInt("id_obra"));
                obra.setImovel((Imovel) imovDao.fetchOne(new Imovel(rs.getInt("id_imovel"))));
                obra.setEngenheiro((Funcionario) funcDao.fetchOne(new Funcionario(rs.getInt("id_engenheiro"))));
                obra.setArquiteto((Funcionario) funcDao.fetchOne(new Funcionario(rs.getInt("id_arquiteto"))));
                obra.setPaisagista((Funcionario) funcDao.fetchOne(new Funcionario(rs.getInt("id_paisagista"))));
                //obra.setDataInicio(Utilidades.trataData(rs.getString("data_inicio")));
                //obra.setDataPrevista(Utilidades.trataData(rs.getString("data_prevista")));                
                obra.setDataInicio(rs.getDate("data_inicio"));
                obra.setDataPrevista(rs.getDate("data_prevista"));                
                obra.setStatus(rs.getString("status"));
                obra.setDescricao(rs.getString("descricao"));
                list.add(obra);
            }
            return list;
        }catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
    
}
